// CAN 通信原理详解

// CAN (Controller Area Network) 是一种用于设备间通信的串行总线协议，最初由德国博世公司为汽车行业开发，
// 现已广泛应用于工业自动化、医疗设备和嵌入式系统等领域。

// 基本概念
// 1. 物理层特性
// -拓扑结构：总线型网络，所有节点连接到同一条总线
// -传输介质：通常使用双绞线（CAN_H 和 CAN_L）
// -信号电平：使用差分信号传输（提高抗干扰能力）
//      显性状态（逻辑0）：CAN_H 高电平，CAN_L 低电平
//      隐性状态（逻辑1）：CAN_H 和 CAN_L 电平接近

// 2. 通信速率
// -标准支持的速率范围：10 Kbps 到 1 Mbps
// -速率与总线长度成反比：
//      1 Mbps：最大约 40 米
//      125 Kbps：最大约 500 米
//      10 Kbps：最大超过 1 公里

// 数据帧结构
// CAN 通信基于帧的传输，主要有以下几种帧类型：
// 1. 标准数据帧
// 帧起始（SOF）：标志帧的开始
// 仲裁段：
//      标准帧：11 位标识符（ID）
//      扩展帧：29 位标识符（ID）
// 控制段：包含数据长度代码（DLC）
// 数据段：0-8 字节数据
// CRC 段：错误检测码
// 确认段（ACK）：接收确认
// 帧结束（EOF）：标志帧的结束

// 2. 其他帧类型
// 远程帧：请求其他节点发送数据
// 错误帧：指示检测到错误
// 过载帧：请求延迟下一帧的传输

// 通信原理
// 1. 多主控制
// CAN 是多主总线，任何节点都可以在总线空闲时发送消息
// 没有中央控制器或主设备

// 2. 消息优先级
// 基于 ID 的优先级机制（ID 值越低，优先级越高）
// 当多个节点同时发送时，通过仲裁过程决定谁获得总线控制权
// 仲裁基于"位优先"原则：显性位（0）覆盖隐性位（1）

// 3. 消息过滤
// 接收方可以设置过滤器，只接收特定 ID 的消息
// 减少处理负担，提高效率

// 4. 错误处理
// 五种错误检测机制：位错误、格式错误、填充错误、CRC 错误、确认错误
// 错误计数和节点状态管理：错误主动、错误被动、总线关闭

// 实际应用中的 CAN 通信
// 1. 通信模式
// 点对点通信：一个节点发送，一个节点接收
// 广播通信：一个节点发送，多个节点接收
// 多播通信：一个节点发送，特定组节点接收

// 2. 标识符（ID）的使用
// 功能寻址：ID 表示消息的功能或内容
// 源寻址：ID 表示发送节点
// 目标寻址：ID 表示接收节点

// 3. 协议扩展
// 在 CAN 基础上构建的高层协议：
// CANopen：工业自动化领域常用
// DeviceNet：工厂自动化领域常用
// J1939：重型车辆领域常用